package com.douma.第24天;

import java.util.*;

/**
 * 抖码算法，让算法学习变的简单有趣
 *
 * @作者 : 老汤
 */
public class 数组组成的最小数字 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String[] data = sc.nextLine().split(",");
        Integer[] nums = new Integer[data.length];
        for (int i = 0; i < nums.length; i++) {
            nums[i] = Integer.valueOf(data[i]);
        }

        // 对数组进行排序，数字长度不相等，则按照数组长度升序排序，长度相等，则按照数字大小升序排列
        // 比如，输入 21,30,62,5,31，排序后为：5,21,30,31,62
        Arrays.sort(nums, new Comparator<Integer>() {
            @Override
            public int compare(Integer num1, Integer num2) {
                String numStr1 = String.valueOf(num1);
                String numStr2 = String.valueOf(num2);
                if (numStr1.length() != numStr2.length()) {
                    // 先按照数字的长度进行升序排列
                    return numStr1.length() - numStr2.length();
                } else {
                    // 如果数字长度相等，则按照数字大小升序排列
                    return num1 - num2;
                }
            }
        });

        List<String> res = new ArrayList<>();
        // 取排序后的前 3 个元素，这 3 个元素组成的数字肯定是最小的
        // 如果没有 3 个元素，则取所有元素
        for (int i = 0; i < Math.min(3, nums.length); i++) {
            res.add(String.valueOf(nums[i]));
        }

        // 按照数字的最高位进行升序排列
        // 比如，输入：5,21,30 排序后则是：21,30,5，那么组合成的最小数就是 21305 了
        Collections.sort(res, new Comparator<String>() {
            @Override
            public int compare(String num1, String num2) {
                return num1.charAt(0) - num2.charAt(0);
            }
        });

        System.out.println(String.join("", res));

        sc.close();
    }
}
